/**
 * \file dictionnaire.h
 * \brief Fonctions de création et d'utilisation d'un dictionnaire
 * \author { Corentin.R Adam.T Clement.V William.B}
 * \version 0.1
 * \date 31 mai 2013
 */

#ifndef DICTIONNAIRE_H
#define	DICTIONNAIRE_H

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "common.h"

#define TAILLE_DICO 8192

/**
 * \struct Cellule
 * \brief Objet de cellule
 *
 */
typedef struct{
    int taille;         /*!< La taille de la sequence */
    char* sequence;     /*!< La sequence */
} cellule ;

cellule *Dictionnaire;

int last_elem;

void AfficherCellule(cellule cell);

cellule * initCell(int tailleChar);

int cellequ(cellule * seq1,cellule * seq2);

cellule * cellcpy(cellule * dest,cellule * src);

cellule * cellcat(cellule * dest,cellule * src);




/**
 * \fn int Initialiser()
 * \brief Initialisation du dictionnaire
 * 
 * \return NO_ERROR ou une erreur d'initalisation
 */
int Initialiser();

/**
 * \fn int Inserer (Code prefixe, Code mono)
 * \brief Insertion dans le dictionnaire
 *
 * \param prefixe Le prefixe à inserer
 * \param mono Le monome à inserer si le prefixe est deja présent
 * 
 * \return NO_ERROR ou une erreur de compression
 */
int Inserer (Code prefixe, Code mono);

/**
 * \fn char *CodeVersChaine(Code code, int *longueur)
 * \brief Retouver une chaine via son Code dans le dictionnaire
 *
 * \param code Le code 
 * \param longueur La longueur de la chaine a rechercher
 * 
 * \return La chaine correspondant au code
 */

cellule *CodeVersChaine(Code code, int longueur);


/**
 * \fn Code SequenceVersCode( char *sequence, int longueur)
 * \brief Retouver un code via sa sequence correspondante
 *
 * \param sequence La sequence de reference
 * \param longueur La longueur de la sequence
 * 
 * \return Le code correspondant
 */
Code SequenceVersCode( char *sequence, int longueur);

/**
 * \fn void AfficherDictionnaire()
 * \brief Affiche le contenu du dictionnaire
 */
void AfficherDictionnaire();


#endif	/* DICTIONNAIRE_H */

